package com.guodi.model.service;


import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService;
import com.guodi.map.entity.MapDivision;
import com.guodi.model.dto.IdtEstimateResultDto;
import com.guodi.model.entity.ApiIdtIndicatorsDir;
import com.guodi.model.entity.ApiIndicatorsVal;
import com.guodi.model.entity.IdtIndicators;
import com.guodi.model.entity.IdtIndicatorsDir;

import java.util.List;
import java.util.Map;

/**
 * @描述：指标目录表 服务类
 * @作者: 彭辉
 * @日期: 2020-06-05
 */
public interface IIdtIndicatorsDirService extends IService<IdtIndicatorsDir> {
    /***
     * @描述: 获取上报值填报时用的指标列表，会过滤非当前用户可见的指标，只能看责任单位是自己单位或子单位的指标
     * @入参: idtTypeCode 指标体系编码，非空必填
     * @入参: orgId 组织单位id，如果不为空，则只返回责任单位为该单位及其子单位的指标
     * @入参: idtType 指标类型，不为空时会过滤指标
     * @入参: keyWord 关键词，不为空时会根据指标名和指标编号过滤，
     * @入参: idtStatus 指标状态，不为空时过滤
     * @出参: 指标列表
     * @作者: 陈宏成
     */
    List<ApiIdtIndicatorsDir> listIdtDirForReport(String idtTypeCode, String orgId, String idtType, String keyWord, String idtStatus, String divisionCode, String idtTypeId);
    /**
     * @描述:查询排序的最大值
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/10 11:49
     **/
    Integer selectMaxSort();

    /**
     * @描述:递归删除树节点下的所有数据
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/3 20:24
     **/
    void deleteByIds(String id);

    /**
     * @描述:根据ParentId删除记录
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/3 11:28
     **/
    void deleteByParentId(String id);

    /**
     * @描述:通过父节点获取所有的列表数据
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/10 17:14
     **/
    List<IdtIndicatorsDir> getAllByParentId(String parentId, String orgId);

    /**
     * @描述:通过父节点获取所有的列表数据
     * @入参:
     * @出参:
     * @作者: 郑文彬
     * @日期: 2020/6/10 17:14
     **/
    List<ApiIdtIndicatorsDir> listDirByCode(String parentId, String orgId, String keyWord);

    /**
    * @描述: 获取待删除类型为指标的数据集合
    * @入参:
    * @出参:
    * @作者: 代鹏刚
    * @日期: 2020/10/26 15:50
    **/
    List<String> findById(String id);

    /**
     * @描述: 重写评估数值查询接口，减少数据库查询，提高查询效率
     * @入参:
     * @出参:
     * @作者: 汤厚韬
     * @日期: 2021/1/13 16:50
     **/
    void formatApiIndicatorsValList(List<ApiIdtIndicatorsDir> treeList, String year, String areaCode);

    JSONArray getIndexFactorGrowthRate(String name, String divisionCode);

    /**
     * @描述: 根据指标编号获取指标ID
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午9:51
     */
    String getDirIdByTypeCode(String typeCode, String divisionCode, List<String> years);

    /**
     * @描述: 根据id, 获取指标数据
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午9:52
     */
    List<ApiIdtIndicatorsDir> listAllById(String id, String areaCode, String year);

    /**
     * @描述: 获取编号到指标的map
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午9:54
     */
    Map<String, IdtIndicators> mapCode2IdtIndicators();
    
    /**
     * @描述: 获取指标名字到指标code的map
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午9:55
     */
    Map<String, String> mapIndicatorsName2Code(List<String> indicatorsNames);

    /**
     * @描述: 根据指标id列表, 获取指标id到指标的map
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午10:00
     */
    Map<String, IdtIndicators> mapIndicatorsId2Entity(List<String> indicatorsIds);

    /**
     * @描述: 获取指标id到指标名字的map
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午9:59
     */
    Map<String, String> mapIndicatorsId2Name(String[] indicatorsIds);

    /**
     * @描述: 获取指标id到指标unit的map
     * @入参:
     * @出参:
     * @作者: 余家鑫
     * @日期: 2021/6/24 上午10:01
     */
    Map<String, String> mapIndicatorsId2Unit(String[] indicatorsIds);


    /**
     * @描述: 指标预警清单地图数据
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/4/7 14:47
     **/
    List idtListByCodeAndYear(String code, String divisionCode, String year);

    /**
     * @描述: 根据指标体系编码、年份、行政区、指标id获取规则配置
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/4/25 16:23
     **/
    List<IdtIndicators> getRuleByCode(String code, List<String> indicatorsId, String monitorTime, String divisionCode);

    /**
     * @描述: 根据指标体系编码、年份、行政区、指标id获取规则配置
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/6 11:26
     **/
    Map warnListByCode(String code, String divisionCode, String year, String type);

    /**
     * @描述: 获取评估结果数据
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/25 14:47
     **/
    List<IdtEstimateResultDto> getEstimateResults(String code, String divisionCode, String year);

    /**
     * @描述: 获取某年份某行政区指标id->指标数值Map
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/31 15:42
     **/
    Map<String,ApiIndicatorsVal> idToMapVal(String year, String divisionCode);
}
